package mtt.model.record;

import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;

/**
 * Diese Klasse dient nur als Oberklasse für alle RecordStore-Klassen, sie stellt alle benötigten standard Funktionen zur Verfügung.
 * Es muss eine Abgeleitet Klassen erstellt werden um die Funktionen nutzen zu können.
 * @author hyphen
 *
 */

public abstract class MttRecordStore implements IMttRecordStore{
	
	/**
	 * enthält den RecordStore
	 */
	private static RecordStore recordStore;
	
	public RecordStore getRecordStore() {
		return recordStore;
	}
	
	/**
	 * Diese Klasse dient nur als Oberklasse für alle RecordStore-Klassen
	 */
	protected MttRecordStore() {
	}
	
	/**
	 * aktualisiert einen Record
	 * 
	 * @param der
	 *            zu aktualisierende Record
	 * @throws RecordStoreException
	 * @throws RecordStoreFullException
	 * @throws InvalidRecordIDException
	 * @throws RecordStoreNotOpenException
	 */
	protected void updateRecord(byte[] record, int recordId)
			throws RecordStoreNotOpenException, InvalidRecordIDException,
			RecordStoreFullException, RecordStoreException {
			recordStore.setRecord(recordId, record, 0, record.length);
	}

	/**
	 * fügt einen Record zur Datenbank hinzu
	 * 
	 * @return record-id
	 * @throws RecordStoreException
	 * @throws RecordStoreFullException
	 * @throws RecordStoreNotOpenException
	 */
	protected int addRecord(byte[] record) throws RecordStoreNotOpenException,
			RecordStoreFullException, RecordStoreException {
		return recordStore.addRecord(record, 0, record.length);
	}
	
	/**
	 * entfernt einen Record aus der Datenbank
	 * 
	 * @param Event.intID
	 * @throws RecordStoreException
	 * @throws InvalidRecordIDException
	 * @throws RecordStoreNotOpenException
	 */
	public void deleteRecord(int recordId) throws RecordStoreNotOpenException,
			InvalidRecordIDException, RecordStoreException {
		recordStore.deleteRecord(recordId);
	}
	
	/**
	 * liefert den Record mit der recordId
	 * 
	 * @param int
	 *            record-id
	 * @throws RecordStoreException
	 * @throws InvalidRecordIDException
	 * @throws RecordStoreNotOpenException
	 */
	protected byte[] getRecord(int recordId) throws RecordStoreNotOpenException,
			InvalidRecordIDException, RecordStoreException {
		return recordStore.getRecord(recordId);
	}
	
	/**
	 * ist der RecordStore schon geöffnet
	 * @return
	 */
	public boolean isOpen() {
		if (recordStore == null) {
			return false;
		} else {
			return true;
		}
	}
	
	/**
	 * öffnet den RecordStore oder legt ihn neu an
	 * @throws RecordStoreException 
	 * @throws RecordStoreNotFoundException 
	 * @throws RecordStoreFullException 
	 */
	protected static void openRecordStore(IMttRecordStore mttRecordStore) throws RecordStoreFullException, RecordStoreNotFoundException, RecordStoreException {
		
		/*
		 * RecordStore öffnen bzw. anlegen wenn noch nicht vorhanden
		 */
		recordStore = RecordStore.openRecordStore(mttRecordStore.getName(), true);
		
	}
	
}
